package cn.lizemin.observer.version0;

import cn.lizemin.observer.version0.entity.Buyer;
import cn.lizemin.observer.version0.entity.Shop;

/**
 * @author lzm
 * @version 1.0
 * @description: 使用观察者模式反客为主
 * @date 2022/4/20 11:19
 */
public class Client {
    /**
     * 程序的入口
     */
    public static void main(String[] args) {
        /**
         * 程序的缺陷：三个人因为在商店无货而被阻塞，直到商店进货满足需求后，他们才走，这样不人性化，
         * 效率也低
         *
         * 改进方式：
         *  将同步变成异步，当商店进货后，自动告知消费者来购买，这样消费者们也不用苦苦等待了
         */
//        Shop shop = new Shop();
//        Buyer lzm = new Buyer("lzm", shop);
//        Buyer zs = new Buyer("zs", shop);
//        Buyer ls = new Buyer("ls", shop);
//        lzm.buy();
//        zs.buy();
//        ls.buy();
//
//        System.out.println("商店开始进货。。。");
//        shop.setProduct("MacBook pro");
//        lzm.buy();

        /**
         * 使用观察者模式反客为主
         *
         * 存在的缺陷，不是所有的人都想买苹果手机，有些人想用华为，所以在买手机的这个指令中就不能写死，
         * 需要将其用抽象方法来替代，模糊的好处就是范围更大
         * 所以在用户上还需要做些扩展
         */
        Buyer lzm = new Buyer("lzm");
        Buyer zs = new Buyer("zs");
        Buyer ls = new Buyer("ls");
        Shop shop = new Shop();
        shop.register(lzm);
        shop.register(zs);
        shop.register(ls);

        //进货
        shop.setProduct("最新款的苹果手机！");

        //通知用户来下单
        shop.notifyBuyers();



    }

}
